package org.ciallo.simplemusicplayer.data.dao;

import androidx.lifecycle.LiveData;
import androidx.room.*;
import org.ciallo.simplemusicplayer.data.model.FavoriteSong;
import org.ciallo.simplemusicplayer.data.model.Song;

import java.util.List;

/**
 * @author Jukomu
 * @Description: FavoriteSong 的数据访问对象 (DAO)
 * 提供对 favorite_songs 表的数据库操作方法
 * @Package: org.ciallo.simplemusicplayer.data.dao
 * @Project: SimpleMusicPlayer
 * @name: FavoriteSongDao
 * @Date: 2025/5/29-05:09
 * @Filename: FavoriteSongDao
 */
@Dao
public interface FavoriteSongDao {

    /**
     * 将一首歌曲添加到收藏。如果已存在，则替换。
     * @param favoriteSong 要收藏的歌曲项。
     */
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void addFavorite(FavoriteSong favoriteSong);

    /**
     * 根据歌曲ID从收藏中移除一首歌曲。
     * @param songId 要移除的歌曲ID。
     */
    @Query("DELETE FROM favorite_songs WHERE song_id = :songId")
    void removeFavoriteBySongId(long songId);

    /**
     * 检查一首歌曲是否已被收藏。
     * @param songId 要检查的歌曲ID。
     * @return LiveData<Boolean>，true表示已收藏，false表示未收藏。
     */
    @Query("SELECT EXISTS(SELECT 1 FROM favorite_songs WHERE song_id = :songId LIMIT 1)")
    LiveData<Boolean> isFavorite(long songId);

    /**
     * 获取所有收藏的歌曲的完整信息，按添加时间降序排列。
     * 这需要 Song 类是一个 Room @Entity。
     * @return LiveData 包装的收藏歌曲列表 (包含完整的Song对象)。
     */
    @Query("SELECT s.* FROM songs s INNER JOIN favorite_songs fs ON s.id = fs.song_id ORDER BY fs.added_timestamp DESC")
    LiveData<List<Song>> getAllFavoriteSongsWithDetails();
}
